home *** CD-ROM | disk | FTP | other *** search
/ Wonky Flux Batch 2019 02 / Wonky_Flux_Batch_2019-02.zip / Wonky Flux Batch 2019-02 / 021 - HO Utilities - Clock Utility System.dsk / BASIC.INTERRUPT.bas < prev    next >
BASIC Source File  |  2019-02-16  |  2KB  |  55 lines

  1. 1990  REM   BASIC INTERRUPT ROUTINE   BY WILLIAM P. GOODWILL
  2. 2000  TEXT : HOME : INPUT "WHAT SLOT IS THE TIMEMASTER IN?  ";SLOT: IF SLOT <1  OR SLOT >7  THEN 2000
  3. 2010  REM **LOAD 3 SMALL ASSY LANGUAGE ROUTINES**
  4. 2020  REM **;COME HERE UPON INTERRUPT
  5. 2030  REM **768   LDA #01  ;SET FLAG FOR BASIC
  6. 2040  REM **      STA 779
  7. 2050  REM **      LDA PIA  ;CLEAR PIA
  8. 2060  REM **      LDA $45  ;RESTORE ACCUMULATOR
  9. 2070  REM **      RTI      ;THEN RETURN
  10. 2080  REM **779   BYTE 00  ;BASIC FLAG
  11. 2090  REM **;USE "CALL 780" TO DISABLE INTERRUPTS
  12. 2100  REM **780   SEI 
  13. 2110  REM **      RTS 
  14. 2120  REM **;USE "CALL 782" TO ENABLE INTERRUPTS
  15. 2130  REM **782   CLI
  16. 2140  REM **      RTS  
  17. 2150  DATA  169,1,141,11,3,173,208,192,165,69,64,0,120,96,88,96
  18. 2160  FOR A = 768 TO 783: READ X: POKE A,X: NEXT A
  19. 2170  CALL 780: REM   TURN OFF INTERRUPTS
  20. 2180  POKE 1022,0: POKE 1023,3: REM  POINT TO INTERRUPT HANDLER
  21. 2190 A =  -16256 +16 *SLOT: REM   PIA BASE ADDRESS = $C080+$N0
  22. 2210  POKE 774,128 +SLOT *16
  23. 2220  POKE A +1,0: POKE A +3,0: REM  DATA DIRECTION REGS
  24. 2240  POKE A,0: REM PORT A INPUT,8 BITS
  25. 2250  POKE A +2,255: REM  PORT B OUTPUT,8 BITS
  26. 2260  REM  THE NEXT 2 POKES DETERMINE INTERRUPT RATE
  27. 2270  REM  (THIS BASIC PROGRAM IS TOO SLOW FOR 1024 HZ INTERRUPTS)
  28. 2280  POKE A +1,12: REM   CONTROL REGISTER A (1 PER SECOND)
  29. 2290  POKE A +3,4: REM  CONTROL REGISTER B
  30. 2300  POKE A +2,47: REM  TELL PIA TO PASS INTERRUPTS
  31. 2310 X =  PEEK(A): REM  CLEAR PIA FLAGS
  32. 2320 F = 779: REM   BASIC FLAG ADDRESS
  33. 2330 Z = 0: REM  FLAG VALUE WHEN CLEAR
  34. 2340  CALL 782: REM   ENABLE INTERRUPTS
  35. 2350 T = 3: REM  NUMBER OF INTERRUPTS PER CYCLE
  36. 2360  ONERR  GOTO 2380
  37. 2370  GOTO 2460: REM  INIT
  38. 2380  CALL 780: STOP : REM  DISABLE INTERRUPTS BEFORE HALTING
  39. 2390  REM  *******************
  40. 2400  IF  PEEK(F) = Z  THEN  PRINT ".";: GOTO 2400: REM WAIT FOR INTERRUPT
  41. 2410  PRINT "/";: REM DO THE FOLLOWING ON EVERY INTERRUPT
  42. 2420  POKE F,Z: REM   RESTORE FLAG AFTER INTERRUPT
  43. 2430 C = C +1: IF C <T  THEN  GOTO 2400: REM  INCR CTR,COMPARE TO MAX
  44. 2450  REM  PERFORM THIS OPERATION WHENEVER COUNT REACHES MAX COUNT T
  45. 2460 C = 0: REM  INIT COUNTER
  46. 2470  PRINT 
  47. 2485 D$ =  CHR$(4): PRINT 
  48. 2490  PRINT D$"IN#"SLOT: PRINT D$"PR#"SLOT
  49. 2500  VTAB 5: INPUT ":";K$
  50. 2510  PRINT D$"IN#0": PRINT D$"PR#0"
  51. 2520  PRINT K$
  52. 2530  CALL  -958
  53. 2540  POKE A +1,12: REM    CONTROL REGISTER A (1 PER SECOND)
  54. 2550  POKE A +3,4: REM   CONTROL REGISTER B
  55. 2560  GOTO 2400